package com.zhoug.common3.encrypt;

import java.io.InputStream;
import java.io.OutputStream;

/**
 * 加解密接口
 *
 * @Author 35574
 * @Date 2021/3/16
 * @Description
 */
public interface IEncryptor {
    /**
     * 加密
     * @param data 源数据
     * @return 加密后的字节数组
     */
    byte[] encrypt(byte[] data);

    /**
     * 加密
     * @param data 源数据
     * @param inputOffset 数据开始位置
     * @param inputLength 数据长度
     * @return 加密后的字节数组
     */
    byte[] encrypt(byte[] data, int inputOffset, int inputLength);

    /**
     * 加密数据流,如文件
     * @param in 待加密的输入数据流
     * @param out 加密后的输出数据流
     */
    void encrypt(InputStream in, OutputStream out);

    /**
     * 加密
     * @param data 源数据
     * @return 加密后的字节数组
     */
    byte[] encrypt(String data);

    /**
     * 加密为base64字符串
     * @param data 源数据
     * @return base64字符串
     */
    String encryptToBase64(byte[] data);

    /**
     * 加密为base64字符串
     * @param data 源数据
     * @return base64字符串
     */
    String encryptToBase64(String data);


    /**
     * 解密
     * @param data 加密后的字符数组
     * @return 源数据
     */
    byte[] decrypt(byte[] data);

    /**
     * 解密
     * @param data 加密后的字符数组
     * @param inputOffset 数据开始位置
     * @param inputLength 数据长度
     * @return 源数据
     */
    byte[] decrypt(byte[] data, int inputOffset, int inputLength);


    /**
     * 解密数据流,如文件
     * @param in 待解密的输入数据流
     * @param out 解密后的输出数据流
     */
    void decrypt(InputStream in, OutputStream out);

    /**
     * 解密
     * @param data 加密后的Base64字符串
     * @return 源数据
     */
    byte[] decrypt(String data);

    /**
     * 解密
     * @param data 加密后的数据
     * @return 源数据
     */
    String decryptToString(byte[] data);

    /**
     * 解密
     * @param data 加密后的Base64字符串
     * @return 源数据
     */
    String decryptToString(String data);

//    /**
//     * 获取Base64Utils实例
//     * @return
//     */
//    Base64Utils getBase64Utils();



}
